#include "volumetool.h"
#include "ui_volumetool.h"
#include<QGraphicsDropShadowEffect>
#include <QPainter>
//绘制三角形
void VolumeTool::paintEvent(QPaintEvent *event)
{
    //设置绘图对象
    QPainter painter(this);
    //设置抗锯齿
    painter.setRenderHint(QPainter::Antialiasing,true);
    //设置画笔
    //没有画笔时，画出来的图形就没有边框和轮廓线
    painter.setPen(Qt::NoPen);
    //设置画刷颜色
    painter.setBrush(Qt::white);
    //创建一个三角形
    QPolygon polygon;
    polygon.append(QPoint  (20,300));
    polygon.append(QPoint(80,300));
    polygon.append(QPoint(50,320));
    //绘制三角形
    painter.drawPolygon(polygon);
}

VolumeTool::VolumeTool(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::VolumeTool),
    isMuted(false), // 默认静⾳
    volumeRatio(20) // 默认⾳量为20%
{
    ui->setupUi(this);
    //第一个是设置窗口是弹出式窗口，第二个是窗口设置透明效果
    //第三个禁用窗口默认的阴影效果，要不然没有控件的部分是黑色的
    setWindowFlags(Qt::Popup|Qt::FramelessWindowHint|Qt::NoDropShadowWindowHint);
    //启用设置窗口透明
    setAttribute(Qt::WA_TranslucentBackground);
    //自定义窗口透明效果
    QGraphicsDropShadowEffect*ShadowEffect=new QGraphicsDropShadowEffect(this);
    ShadowEffect->setOffset(0,0);//设置阴影离元素的距离
    ShadowEffect->setColor("#646464");//阴影颜色
    ShadowEffect->setBlurRadius(10);//阴影半径
    setGraphicsEffect(ShadowEffect);//使用这个阴影设定

    //给按钮设置图标
    ui->silenceBtn->setIcon(QIcon(":/images/volumn.png"));
    //设置音量的默认大小是20
    ui->volumeRatio->setText("20%");
    QRect rect=ui->outSlider->geometry();
    ui->outSlider->setGeometry(rect.x(),180-36+25,rect.width(),36);
    //移动按钮位置
    ui->sliderBtn->move(ui->sliderBtn->x(),ui->outSlider->y() - ui->sliderBtn->height()/2);
    // 关联静⾳按钮的信号槽
    connect(ui->silenceBtn, &QPushButton::clicked, this,&VolumeTool::onSilenceBtnClicked);
    // 安装事件过滤器
    ui->sliderBox->installEventFilter(this);
}

void VolumeTool::onSilenceBtnClicked()
{
    isMuted = !isMuted;
     if(isMuted)
     {
         ui->silenceBtn->setIcon(QIcon(":/images/silent.png"));
     }
     else
     {
         ui->silenceBtn->setIcon(QIcon(":/images/volumn.png"));
     }
     emit setSilence(isMuted);
}

bool VolumeTool::eventFilter(QObject *watched, QEvent *event)
{
    // 过滤volumeBox上的事件
     if(watched == ui->sliderBox)
     {
        if(event->type() == QEvent::MouseButtonPress)
        {
            // 如果是⿏标按下事件，修改sliderBtn和outLine的位置，并计算volumeRationsetVolume();
            setVolume();
        }
        else if(event->type() == QEvent::MouseMove)
        {
            // 如果是⿏标滚动事件，修改sliderBtn和outLine的位置，并计算volumeRation，setVolume();
            setVolume();
            // 并发射setMusicVolume信号
            emit setMusicVolume(volumeRatio);
        }
        else if(event->type() == QEvent::MouseButtonRelease)
        {
            // 如果是⿏标释放事件，直接发射setMusicVolume信号
            setVolume();
            emit setMusicVolume(volumeRatio);
        }

        return true;
     }
     return QObject::eventFilter(watched, event);
}

void VolumeTool::setVolume()
{
    // 1. 将⿏标的位置转换为sloderBox上的相对坐标，此处只要获取y坐标
     int height = ui->sliderBox->mapFromGlobal(QCursor().pos()).y();
     // 2. ⿏标在volumeBox中可移动的y范围在[25, 205之间]
     height = height < 25? 25 : height;
     height = height > 205? 205 : height;
     // 4. 更新outline的位置和⼤⼩
     ui->outSlider->setGeometry(ui->outSlider->x(), height, ui->outSlider->width(),205 - height);
     // 3. 调整sliderBtn的位置
     ui->sliderBtn->move(ui->sliderBtn->x(),ui->outSlider->y() - ui->sliderBtn->height()/2);

     // 5. 计算⾳量⽐率
     volumeRatio = (int)(ui->outSlider->height()/(float)180*100);
     // 6. 设置给label显⽰出来
     ui->volumeRatio->setText(QString::number(volumeRatio)+"%");
}

VolumeTool::~VolumeTool()
{
    delete ui;
}
